/*
蜘蛛牌
蜘蛛牌是windows xp操作系统自带的一款纸牌游戏，游戏规则是这样的：只能将牌拖到比她大一的牌上面（A最小，K最大），如果拖动的牌上有按顺序排好的牌时，那么这些牌也跟着一起移动，游戏的目的是将所有的牌按同一花色从小到大排好，为了简单起见，我们的游戏只有同一花色的10张牌，从A到10，且随机的在一行上展开，编号从1到10，把第i号上的牌移到第j号牌上，移动距离为abs(i-j)，现在你要做的是求出完成游戏的最小移动距离。
Input
第一个输入数据是T，表示数据的组数。
每组数据有一行，10个输入数据，数据的范围是1,101,10，分别表示A到10，我们保证每组数据都是合法的。
Output
对应每组数据输出最小移动距离。
Sample Input
1
1 2 3 4 5 6 7 8 9 10
Sample Output
9
题意：小牌叠在大牌上，问叠成一堆的最小移动距离
*/
#include <bits/stdc++.h>
#define ll long long
#define PI acos(-1)
#define M(n, m) memset(n, m, sizeof(n));
const int INF = 1e9 + 7;
const int maxn = 1e5;
using namespace std;

bool vis[14];
int a[14];
int n, m, x, ans;
//cur代表已经移动了几张牌，step代表目前移动耗费的步数
void DFS(int cur, int step)
{
    if (step >= ans)
        return ;
    if (cur == 9)// 移动9张牌的时候所有的牌都在一块了
    {
        ans = step;
        return ;
    }
    //最后一张牌除空位（已标记）外没有任何移动的地方，本语句代表现在准备移动(操作)哪张牌
    for (int i = 1;i < 10;i ++)
    {
        if (!vis[i])
        {
            vis[i] = 1;
            //移动到哪个位置。注意这里不一定是移动到5号牌（打个比方）后的位置，也有可能是5号牌前的位置。因为每次dfs相当于生出一层树枝，而生出的树枝又是从1号牌开始操作，也就是说只要2、3、4号牌没被标记，还是有可能移动到这里，而移到这里的是1号牌而不是5号牌
            for (int j = i + 1;j <= 10;j ++)
            {
                if (!vis[j])
                {
                    DFS(cur + 1, step + abs(a[i] - a[j]));
                    //这里的直观意义就是下一层树枝返回，此牌所找的位置安放不对或寻求其他最优解，而for是为了遍历所有解，是一个意思，所以退出
                    break;
                }
            }
            vis[i] = 0;
        }
    }
}

int main()
{
    cin >> n;
    while (n --)
    {
        for (int i = 1;i <= 10;i ++)
        {
            cin >> x;
            a[x] = i;//牌面为i的牌所在的位置
        }
        ans = INF;
        memset(vis, 0, sizeof(vis));
        DFS(0, 0);
        cout << ans << endl;
    }
    return 0;
}
